home *** CD-ROM | disk | FTP | other *** search
/ .net 2002 March / DotNetMagazine-Issue107-Coverdisc-NET107-02-03-PCMac.bin / pc / PC Software / free_browsing / DavesQckSearchDbar3-14 / dqsd.exe / searches / multi.xml < prev    next >
Text File  |  2002-08-30  |  5KB  |  155 lines

  1. <search function="multi">
  2.   <name>MultiSearch</name>
  3.   <description>
  4.     Perform multiple searches with a single command line expression.<br/>
  5.     <div class="helpboxDescLabels">Usage:</div>
  6.     <table class="helpboxDescTable">
  7.       <tr><td>multi <<i>search1</i>> [<<i>search2</i>> [...]] <<i>term</i>></td></tr>
  8.     </table>
  9.     <div class="helpboxDescLabels">Example:</div>
  10.     <table class="helpboxDescTable">
  11.       <tr><td>multi av gg wood planes</td></tr>
  12.     </table>
  13.   </description>
  14.   <category>Search the Web</category>
  15.   <contributor>Neel Doshi</contributor>
  16.   
  17.   <script><![CDATA[
  18.     // This function is almost identical to the shortcut function in search.html
  19.     function multiIsCommand(t)
  20.     {
  21.       // look for matching commands first
  22.       var search = null;
  23.       var term = null;
  24.       var result = t.match(/^([a-zA-Z]+)\b/)
  25.       if (result)
  26.       {
  27.         if (aliases[result[1]])
  28.         {
  29.           search = aliases[result[1]];
  30.           term = t.slice(result[1].length);
  31.         }
  32.       }
  33.  
  34.       // then look for longest matching punctuation prefix
  35.       if (!search)
  36.       {
  37.         result = t.match(/^([\s~`!@#$%\^&\*()\-=\+{}\[\];:'<>,\.\/\?]+)/);
  38.         if (result)
  39.         {
  40.           for (var subs = result[1].length; subs>0; subs--)
  41.           {
  42.             search = aliases[result[1].slice(0, subs)];
  43.             if (search)
  44.             {
  45.               term = t.slice(subs);
  46.               break;
  47.             }
  48.           }
  49.         }
  50.       }
  51.  
  52.       // then look for longest matching punctuation suffix
  53.       if (!search)
  54.       {
  55.         result = t.match(/([\s~`!@#$%\^&\*()\-=\+{}\[\];:'<>,\.\/\?]+)$/);
  56.         if (result)
  57.         {
  58.           for (var subs = result[1].length; subs>0; subs--)
  59.           {
  60.             search = aliases[result[1].slice(-subs)];
  61.             if (search)
  62.             {
  63.               term = t.slice(0, -subs);
  64.               break;
  65.             }
  66.           }
  67.         }
  68.       }
  69.  
  70.       // no match, no dice
  71.       if (!search)
  72.         return false;
  73.  
  74.       // return the proper search term for the asking procedure
  75.       return search;
  76.     }
  77.  
  78.  // the multi function actually performs the multiple searches given
  79.  // the input parameters.  if the user's reuseBrowserWindowMode parameter
  80.  // is set to 1, multi will not work.  Also, if the user's launchmode
  81.  // is not set to zero, multi will pause between searches
  82.  // to allow multi to work with browsers other than IE.
  83.     function multi(q)
  84.     {
  85.       if ( reuseBrowserWindowMode == 1 )
  86.       {
  87.         alert("Multisearch requires the reuseBrowserWindowMode parameter to be set to zero or two.  Otherwise, all the searches will be spawned in the same window.");
  88.         return false;
  89.       }
  90.       if ( nullArgs("multi", q) )
  91.         return false;
  92.       else
  93.         if (result = q.split( /[,\s]+/ ) )
  94.         {
  95.  
  96.           var arrCmds = new Array(0);
  97.           var arrParams = new Array(0);
  98.  
  99.           // Loop through the arguments to filter out the commands.
  100.           // if an argument is not a command, then no future arguments
  101.           // can be commands either.  The following variable keeps track of this.
  102.           var fLoopBool = 1;
  103.           var strCommandName;
  104.  
  105.           for ( var i = 1; i <= result.length; i++ )
  106.           {
  107.             strCommandName = multiIsCommand(result[i - 1]);
  108.             if (strCommandName != false && fLoopBool == 1)
  109.             {
  110.               // Append the command list with this command
  111.               arrCmds.push(strCommandName);
  112.             }
  113.             else
  114.             {
  115.               // Set the fLoopBool to zero since no more commands should be found
  116.               fLoopBool = 0;
  117.  
  118.               // Append the parameter string with this word
  119.               arrParams.push(result[i - 1].replace("\x27","\\x27"));
  120.             }
  121.           }
  122.           // Loop through the command list and perform the search
  123.           if (arrCmds.length == 0)
  124.           {
  125.             alert("Multisearch needs at least one search type parameter.");
  126.             return false;
  127.           }
  128.           else
  129.           {
  130.             // Perform each of the searches
  131.             for ( var j = 1; j <= arrCmds.length; j++ )
  132.             {
  133.               // if the user's launchmode is anything but zero, pause between searches.
  134.               if (launchmode != 0)
  135.               {
  136.                 var Timeoutms = 1500;
  137.                 var SearchString = "performsearch('" + arrCmds[j - 1] + "','" + arrParams.join(" ") + "');";
  138.                 setTimeout( SearchString, Timeoutms * (j-1) );
  139.               }
  140.               else
  141.                 performsearch(arrCmds[j - 1], arrParams.join(" "));
  142.             }
  143.             return true;
  144.           }
  145.         }
  146.       }
  147.   ]]></script>
  148.  
  149.   <copyright>
  150.     Copyright (c) 2002 David Bau
  151.     Distributed under the terms of the
  152.     GNU Public License, Version 2 (http://www.gnu.org/copyleft/gpl.txt)
  153.   </copyright>
  154. </search>
  155.